package gameFight;

/**
 * 作者:TC
 * 时间:在主程序中使用角色和怪兽进行战斗额代码 18:10
 * 描述:没有bug
 */
// 在主程序中使用角色和怪物进行战斗的示例代码
public class Main {
    public static void main(String[] args) {
        // 创建角色A、角色B和怪物M对象
        RoleA roleA = new RoleA(100, 10, 2, 0.2, 0.1, 1000, 10);
        RoleB roleB = new RoleB(110, 12, 3, 0.25, 0.1, 2000, 15);
        MonsterM monsterM = new MonsterM(200, 8, 4, 0.2, 0.1);

        System.out.println("输出怪兽的基本信息:\n生命值:"+monsterM.getHealth()+"  初次攻击力数值:"+monsterM.getAttack()+"  初始防御力数值:"+monsterM.getDefense()+"  触发暴击的概率:"+monsterM.getCritRate()+"  触发防护盾的概率:"+monsterM.getShieldRate());

        System.out.println("\n输出角色A的基本信息:\n生命值:"+roleA.getHealth()+"   初次攻击力数值:"+roleA.getAttack()+"   初始防御力数值:"+roleA.getDefense()+"   初始经验值:"+roleA.getExperience()+"   当前等级:"+roleA.getLevel()+"   触发暴击的概率:"+roleA.getCritRate()+"   触发防护盾的概率:"+roleA.getShieldRate());

        System.out.println("\n输出角色B的基本信息:\n生命值:"+roleB.getHealth()+"   初次攻击力数值:"+roleB.getAttack()+"   初始防御力数值:"+roleB.getDefense()+"   初始经验值:"+roleB.getExperience()+"   当前等级:"+roleB.getLevel()+"   触发暴击的概率:"+roleB.getCritRate()+"   触发防护盾的概率:"+roleB.getShieldRate());
        int i=1;//记录战斗的次数
        // 模拟战斗过程
        int aactack,bactack,mactack,adefense,bdefense,mdefense;
        while (roleA.isAlive() ||roleB.isAlive() && monsterM.isAlive()) {
            //1表示角色攻击怪兽，0表示怪兽攻击角色
            int a = Math.random() < 0.5 ? 0 : 1;
            if (a == 1) {
                // 角色A或角色B随机攻击怪物
                Role attacker = Math.random() < 0.5 ? roleA : roleB;
               int tempattack=attacker.calculateAttack();
               int tempdefense=monsterM.calculateDefense();
                int damage =tempattack- tempdefense;
                if (damage > 0) {
                    monsterM.takeDamage(damage);
                }
                if(attacker==roleA){
                    aactack=tempattack;
                    bactack=roleB.getAttack();
                    adefense=roleA.getDefense();
                    bdefense=roleB.getDefense();
                    mdefense=tempdefense;
                    mactack=monsterM.getAttack();
                }else{
                    aactack= roleA.getAttack();
                    bactack=tempattack;
                    adefense=roleA.getDefense();
                    bdefense=roleB.getDefense();
                    mdefense=tempdefense;
                    mactack=monsterM.getAttack();
                }
            } else {
                // 怪物M同时攻击角色A和角色B
                int aa,bb,cc;
                cc=monsterM.calculateAttack();
                if (roleA.isAlive() && roleB.isAlive()) {
                    bb= roleB.calculateDefense();
                    aa= roleA.calculateDefense();
                    int damageToA = cc - aa;
                    int damageToB = cc - bb;
                    if (damageToA > 0) {
                        roleA.takeDamage(damageToA);
                    }
                    if (damageToB > 0) {
                        roleB.takeDamage(damageToB);
                    }
                    aactack= roleA.getAttack();
                    bactack= roleB.getAttack();
                    adefense=aa;
                    bdefense=bb;
                    mdefense=monsterM.getDefense();
                    mactack=cc;
                } else if (roleA.isAlive()) {

                    aa= roleA.calculateDefense();
                    int damageToA = cc - aa;
                    if (damageToA > 0) {
                        roleB.takeDamage(damageToA);
                    }
                    aactack= roleA.getAttack();
                    bactack= roleB.getAttack();
                    adefense=aa;
                    bdefense=roleB.getDefense();
                    mdefense=monsterM.getDefense();
                    mactack=cc;
                } else {

                    bb= roleB.calculateDefense();
                    int damageToB = cc - bb;
                    if (damageToB > 0) {
                        roleB.takeDamage(damageToB);
                    }
                    aactack= roleA.getAttack();
                    bactack= roleB.getAttack();
                    adefense=roleA.getDefense();
                    bdefense=bb;
                    mdefense=monsterM.getDefense();
                    mactack=cc;
                }

            }
            System.out.print("|---------------------------------------------------------|");
            System.out.println("\n输出怪兽第" + i + "次攻击的结果信息:\n生命值:" + monsterM.getHealth() + "    --当前攻击力数值:" + mactack + "  --当前防御力数值:" + mdefense);

            System.out.println("\n输出roleA第" + i + "次攻击的结果信息:\n生命值:" + roleA.getHealth() + " --当前攻击力数值:" +aactack + " --当前防御力数值:" + adefense + "  --当前经验值:" + roleA.getExperience() + "  --当前等级:" + roleA.getLevel());

            System.out.println("\n输出roleB第" + i + "次攻击的结果信息:\n生命值:" + roleB.getHealth() + " --当前攻击力数值:" + bactack + "  --当前防御力数值:" +bdefense+ "  --当前经验值:" + roleB.getExperience() + "  --当前等级:" + roleB.getLevel());
            System.out.println("|-----------------------------------------------------------------------------|");
            i = i + 1;
        }
        // 输出战斗结果
        if (!roleA.isAlive()&&(!roleB.isAlive())) {
            System.out.println("怪兽胜利！玩家没有获得奖励！");
        }
         else {
            System.out.println("怪物M被角色A和角色B击败！角色胜利");
            /* 玩家胜利调用奖励机制，调用胜利的方法 */
            roleA.win();
            System.out.println();
            roleB.win();
        }
    }
}